<?php
namespace app\common\controller;

// 底层控制器
use think\Controller;

//引入cookie
use think\Cookie;

/**
 * 后台公共控制器
 */
class Backend extends Controller
{
    //定义一个可继承的一个全局属性 不需要登录
    protected $NoNeedLogin = [];

    public function __construct(){

        parent::__construct();

        //定义一个全局模型
        $this->AdminModel = model('Admin');
        $this->ConfigModel = model('Config');

        //先去除数组中为空元素
        $this->NoNeedLogin = array_filter($this->NoNeedLogin);

        //为空 说明全部都要判断是否登录
        if(empty($this->NoNeedLogin)){

            $this->Islogin();

        } else{

            //所有方法
            $all = "*";

            //获取当前访问的控制器方法
            $action = $this->request->action();

            //正常情况 * 和 action控制器方法 如果这两个有一个满足在NoNeedLogin这个数组里面 就说明 不需要登录
            if(!in_array($all, $this->NoNeedLogin) && !in_array($action, $this->NoNeedLogin))
            {
                //需要登录
                $this->IsLogin();   
            }

        }

        // 获取系统配置
        $this->system();
    }

    //判断是否登录
    public function Islogin(){

       //判断是否有登录
       $LoginAdmin = session('LoginAdmin');

       if(!empty($LoginAdmin))
       {

        //查出来是否正确
        $id = isset($LoginAdmin['id']) ? $LoginAdmin['id'] : 0;

        $admin = $this->AdminModel->find($id);

        //当这个人不存在
        if(!$admin)
        {
            //session属于伪造的   // 删除（当前作用域）
            session('LoginAdmin', null);
            $this->error('非法登录', url('admin/index/login'));
            exit;
        }

        //判断是否有禁用
        if($admin['state'] == 0)
        {
            session('LoginAdmin', null);
            $this->error('该管理员已被禁用', url('admin/index/login'));
            exit;
        }

        //设置给所有全局的控制器
        $this->LoginAdmin = $admin;

        //当这个人存在的话 做一个全局的赋值
        $this->assign('LoginAdmin', $admin);

       } else{

            $this->error('请先登录', url('admin/index/login'));
            exit;

       }

    }

    //获取系统配置
    public function system(){
        
        $SystemList = $this->ConfigModel->select();

        $System = [];

        foreach($SystemList as $item)
        {
            $System[$item['key']] = $item;
        }

        //让每个界面都可以获取系统配置
        $this->assign('System', $System);
    }
}